package tptecnicas.printers.parser;

import java.util.ArrayList;
import java.util.List;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

import tptecnicas.logging.MessageInfo;

/**
 * Implementacion de la conversion del mensaje de salida a tipo Json.
 * Forma parte de la cadena de formato en la salida.
 * El mensaje tiene un formato preconfigurado con toda la informacion disponible.
 */
public class JsonParser implements ParserChain {

	private List<FormatReplacer> replacers;
	private ParserChain parserChain;

	public JsonParser() {
		replacers = new ArrayList<>();	
		replacers.add(new DateReplacer());
		replacers.add(new LevelReplacer());
		replacers.add(new ThreadReplacer());
		replacers.add(new SeparatorReplacer());
		replacers.add(new LineNumberReplacer());
		replacers.add(new FilenameReplacer());
		replacers.add(new MethodNameReplacer());
		replacers.add(new LoggerNameReplacer());
		replacers.add(new MessageReplacer());
		
		this.parserChain = new PlainParse(replacers);
	}

	public String parse(MessageInfo info, String outputFormat) {
		if (! outputFormat.equals("Json")) {
			return this.parserChain.parse(info, outputFormat);
		}
		JSONObject dataSet = new JSONObject();
		JSONArray properties = new JSONArray();
		for(FormatReplacer replacer : replacers) {
			dataSet.put(replacer.toString(), replacer.getValue(info)) ;
		}
		properties.add(dataSet);
		return properties.toString();
	}

	
}
